/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    2013 year
 *    Author: Esipenko Aleksey (Alexorleon)
 *    E-Mail: alexorleon@gmail.com
 */
#ifndef GENQRCODE_H
#define GENQRCODE_H

#include <QString>
#include <QPainter>

#define ME_NAME "QRgen"
#define ME_VERSION "0.2"

class GenQRCode{

public:
    GenQRCode(const QString &code) : genCode(code), lengthMessage(0), amountBitsForVersion(0){}
    ~GenQRCode(){}

    // проверяем полученный текст
    int prepare();
    // определяем версию
    int DefineVersion();
    // определяем количество бит
    int DefineNumberBits();
    // кодирование данных
    int DataEncoding();
    // корректировка размера по таблице
    int LengthCorrection();
    // генерация кода Рида-Соломона
    int ReedSolomon();
    // генерация изображения
    int ImageGeneration();
    QString getImagePath() const;
private:
    int GetAlphanumeric(const QChar &_chr);
    int EncodeNumeric();
    int EncodeAlphanumeric();
    int EncodeBinaryMode();
    const QString AddingZeros(const int &multi, const int &size);
    const QString addZero(const QString &str);
    int ChoiceMask(const int &n, const int &i, const int &j);

    enum TypeQRData{numericType=0, alphanumericType=1, binaryType=2, kanjiType=3};
    TypeQRData typeQRData;
    QString genCode;
    int lengthMessage;
    int version;
    int amountBitsForVersion;
    QString binaryLengthMessage;
    QString binaryMessage;  // Основная переменная сообщения
    QString finishedBinaryMessage;  // окончательное сообщение

    QPainter paint;
    QPixmap *pix;
};

#endif // GENQRCODE_H
